ПолеПоискЗамена.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                          ОТДЕЛ ПолеПоискЗамена;
(****************************************************************************** 
 * НАЗНАЧЕНИЕ: ввод строки поиска и замены 
 ******************************************************************************)
ИСПОЛЬЗУЕТ
  Ввод        ИЗ "...\Отделы\Обмен\",
  Настройки   ИЗ "...\Отделы\Обмен\",
  Читать      ИЗ "...\Отделы\Обмен\",
  Писать      ИЗ "...\Отделы\Обмен\",
  Справка     ИЗ "...\Отделы\Обмен\",
  Надел       ИЗ "...\Отделы\Поле\",
  Памятка     ИЗ "...\Отделы\Поле\",
  Поле        ИЗ "...\Отделы\Поле\",
  Подложка    ИЗ "...\Отделы\Поле\",
  Черта       ИЗ "...\Отделы\Поле\",
  Холст       ИЗ "...\Отделы\Поле\",
  Крестик     ИЗ "...\Отделы\Поле\",
  Точка       ИЗ "...\Отделы\Поле\",
  Записка     ИЗ "...\Отделы\Поле\",
  Метка       ИЗ "...\Отделы\Поле\",
  Кнопка      ИЗ "...\Отделы\Поле\";

(******************************************************************************)
ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка);
(* получить и обработать управляющие послания *)
ПЕР
  код:ЦЕЛ;
УКАЗ
  ДЛЯ посылка ВИДА
  | Ввод.ОтКлавиш:
      код:=посылка.код;
      посылка.код:=0; (* скорее всего отработаем посылку *)
      ВЫБРАТЬ код ИЗ
      | 1BH: поле.состояние:=Поле.сОтмена (* Esc *)
      | 79H: поле.состояние:=Поле.сДалее  (* F10 *)
      | 0DH: поле.состояние:=Поле.сДалее  (* Ent *)
      | 70H: Справка.Номер(5)             (* F1 *)
      ИНАЧЕ
        посылка.код:=код
      КОН
  | Кнопка.Посылка:
      поле.состояние:=посылка.кнопка.действие
  ИНАЧЕ
  КОН             
КОН Приём;

(******************************************************************************)
ЗАДАЧА Выполнить-(окружение:Поле.Доступ; холст:Холст.Доступ):ЦЕЛ;
ПОСТ
          (* цепочки для кнопок *)
  цДалее ="[ Далее ]";
  цОтмена="[ Отмена ]";
  длДалее =ДЛИНА(цДалее);
  длОтмена=ДЛИНА(цОтмена);
  промежуток=3; (* промежуток между кнопками *)
  занято=длДалее + промежуток + длОтмена;
  колонок=70;
  позДалее=1 + (колонок-занято-1) ДЕЛИТЬ 2;
  позОтмена=позДалее + длДалее + промежуток;
ПЕР
  поле:Поле.Доступ;
  подложка:Подложка.Доступ;
  пИскать,пЗаменить:Памятка.Доступ;
  черта1,черта2,черта3:Черта.Доступ;
  хИскать,хЗаменить:Холст.Доступ; 
  крЗаглавные,крЦелые,крОбратный,крПодтверждение,крОтмеченная:Крестик.Доступ;
  мИскать,мЗаменить:Метка.Доступ;
  кнДалее,кнОтмена:Кнопка.Доступ;
  зНачало:Записка.Доступ;
  тНачало:Точка.Доступ;
  нНачало:РЯД 2 ИЗ Надел.Надпись;
  понятие:ЦЕПЬ[100];
УКАЗ
    пИскать:=Памятка.Найти("ПоискИскать");
  пЗаменить:=Памятка.Найти("ПоискЗаменить");
          (* создаём поле *)
  поле:=Поле.Создать(0,0,16,колонок,окружение,ВКЛ,Приём);
          (* создаём наделы *)
  ЕСЛИ Холст.поиск.заменить ТО
    подложка:=Подложка.Создать(0,0,0,0,"Замена");
  ИНАЧЕ
    подложка:=Подложка.Создать(0,0,0,0,"Поиск");
  КОН;
  хИскать:=Холст.СоздатьСтроку    (2,2,-2,пИскать);
  мИскать:=Метка.Создать          (1,2,"~Искать",хИскать); 
  хЗаменить:=Холст.СоздатьСтроку  (4,2,-2,пЗаменить);
  мЗаменить:=Метка.Создать        (3,2,"Заменить ~на",хЗаменить); 
  черта1:=Черта.Создать           (5,0,1,0);
  крЗаглавные:=Крестик.Создать    (6,2,"Учитывать ~заглавные буквы"); 
  крЦелые:=Крестик.Создать        (7,2,"Искать ~целые слова"); 
  крОтмеченная:=Крестик.Создать   (8,2,"Только в ~отмеченной области"); 
  крОбратный:=Крестик.Создать     (6,34,"О~братный просмотр"); 
  крПодтверждение:=Крестик.Создать(7,34,"~Подтверждение замены"); 
  черта2:=Черта.Создать           (9,0,1,0);
  зНачало:=Записка.Создать        (10,2,1,18,"Начинать от:");
  нНачало[0]:="~границы области";
  нНачало[1]:="положения ~указки";
  тНачало:=Точка.Создать          (11,2,нНачало); 
  черта3:=Черта.Создать           (13,0,1,0);
  кнДалее:=Кнопка.Создать         (14,позДалее,цДалее,Поле.сДалее,ВКЛ); 
  кнОтмена:=Кнопка.Создать        (14,позОтмена,цОтмена,Поле.сОтмена,ВКЛ); 
          (* заполняем наделы *)
  Холст.ПонятиеВЦепь(холст,понятие);
  ЕСЛИ понятие # "" ТО
    Холст.СтрокуИзЦепи(хИскать,понятие)
  КОН;
  крЗаглавные.отмечен:=Холст.поиск.заглавные;
  крЦелые.отмечен:=Холст.поиск.целые;
  крОтмеченная.отмечен:=Холст.поиск.отмеченная И холст.отметка.существует;
  крОбратный.отмечен:=Холст.поиск.обратный;
  крПодтверждение.отмечен:=Холст.поиск.подтверждение;
  ЕСЛИ НЕ Холст.поиск.заменить ТО
    хЗаменить.состояние:=Надел.сОтключен;
    мЗаменить.состояние:=Надел.сОтключен;
    крПодтверждение.состояние:=Надел.сОтключен
  КОН;
  ЕСЛИ НЕ холст.отметка.существует ТО
    крОтмеченная.состояние:=Надел.сОтключен
  КОН;
  ЕСЛИ Холст.поиск.отУказки ТО
    тНачало.текущая:=1
  КОН;
          (* добавляем наделы в порядке отрисовки и получения ввода *)
  Поле.ДобавитьНадел(поле,подложка);
  Поле.ДобавитьНадел(поле,мИскать);
  Поле.ДобавитьНадел(поле,хИскать);
  Поле.ДобавитьНадел(поле,мЗаменить);
  Поле.ДобавитьНадел(поле,хЗаменить);
  Поле.ДобавитьНадел(поле,черта1);
  Поле.ДобавитьНадел(поле,крЗаглавные);
  Поле.ДобавитьНадел(поле,крЦелые);
  Поле.ДобавитьНадел(поле,крОтмеченная);
  Поле.ДобавитьНадел(поле,крОбратный);
  Поле.ДобавитьНадел(поле,крПодтверждение);
  Поле.ДобавитьНадел(поле,черта2);
  Поле.ДобавитьНадел(поле,зНачало);
  Поле.ДобавитьНадел(поле,тНачало);
  Поле.ДобавитьНадел(поле,черта3);
  Поле.ДобавитьНадел(поле,кнДалее);
  Поле.ДобавитьНадел(поле,кнОтмена);
          (* основная работа *)
  Поле.Рисовать(поле);
  ПОВТОРЯТЬ
    Поле.Проверить(поле)
  ДО поле.состояние # Поле.сРабота;
          (* восстанавливаем окружение *)
  Поле.Рисовать(окружение);
          (* перебрасываем данные *)
  ЕСЛИ поле.состояние = Поле.сДалее ТО
    Холст.СтрокуВПамятку(хИскать);
    Холст.СтрокуВПамятку(хЗаменить);
    Холст.СтрокуВЦепь(хИскать,Холст.поиск.образец);
    Холст.СтрокуВЦепь(хЗаменить,Холст.поиск.замена);
    Холст.поиск.заглавные:=крЗаглавные.отмечен;
    Холст.поиск.целые:=крЦелые.отмечен;
    ЕСЛИ крОтмеченная.состояние # Надел.сОтключен ТО
      Холст.поиск.отмеченная:=крОтмеченная.отмечен
    КОН;
    Холст.поиск.обратный:=крОбратный.отмечен;
    Холст.поиск.подтверждение:=крПодтверждение.отмечен;
    Холст.поиск.отУказки:=(тНачало.текущая = 1)
  КОН;
  ВОЗВРАТ поле.состояние
КОН Выполнить;

(******************************************************************************)
ЗАДАЧА ЧитатьНастройки-(поток:Читать.Поток);
УКАЗ
  Холст.поиск.заглавные:=Настройки.ЧитатьКлюч(поток);
  Холст.поиск.целые:=Настройки.ЧитатьКлюч(поток);
  Холст.поиск.отмеченная:=Настройки.ЧитатьКлюч(поток);
  Холст.поиск.обратный:=Настройки.ЧитатьКлюч(поток);
  Холст.поиск.подтверждение:=Настройки.ЧитатьКлюч(поток);
  Холст.поиск.отУказки:=Настройки.ЧитатьКлюч(поток)
КОН ЧитатьНастройки;

(******************************************************************************)
ЗАДАЧА ПисатьНастройки-(поток:Писать.Поток);
УКАЗ
  Настройки.ПисатьКлюч(поток,"заглавные",Холст.поиск.заглавные);
  Настройки.ПисатьКлюч(поток,"целые",Холст.поиск.целые);
  Настройки.ПисатьКлюч(поток,"отмеченная",Холст.поиск.отмеченная);
  Настройки.ПисатьКлюч(поток,"обратный",Холст.поиск.обратный);
  Настройки.ПисатьКлюч(поток,"подтверждение",Холст.поиск.подтверждение);
  Настройки.ПисатьКлюч(поток,"отУказки",Холст.поиск.отУказки)
КОН ПисатьНастройки;

КОН ПолеПоискЗамена.




Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы